(PYTHON) Day - 3

Reference

  • 문제 출처 - HackerRank
  • 파이썬 연습 - Practice - Python

개인적인 생각과 상상으로 작성한 내용들이 포함되어 있습니
문제를 풀고 Discussion Tab을 참고하며 코드 스타일을 개선하려고 노력하고자 합니다


HackerRank

Mean, Var, Std

평균, 분산, 표준편차를 구하는 문제

  • HackerRank 의 답안 출력 양식이 numpy 1.13 버전을 사용하고 있는데
    현제 Python3 numpy는 1.14 버전이기 때문에 PASS하기 위해 버전을 맞춰준다
    import numpy

    numpy.set_printoptions(legacy='1.13')
    N, M = map(int, input().split())

    my_array = numpy.array([input().split() for _ in range(N)], int)
    print(numpy.mean(my_array, axis = 1))
    print(numpy.var(my_array, axis = 0))
    print(numpy.std(my_array))
  • N*M을 입력 받지만 M은 필요 없으므로 N만 입력 받는 식으로 2줄 코딩
    n = np.array([input().split() for \_ in range(int(input().split()[0]))],int)
    print(np.mean(n,axis=1),np.var(n,axis=0),np.std(n),sep="\n")

Sum, Product

덧셈과 곱셈을 구하는 문제

import numpy

# sum 덧셈 default 값이 none과 동일

my_array = numpy.array([ [1, 2], [3, 4] ])

print numpy.sum(my_array, axis = 0) #Output : [4 6]
print numpy.sum(my_array, axis = 1) #Output : [3 7]
print numpy.sum(my_array, axis = None) #Output : 10
print numpy.sum(my_array) #Output : 10

# product 곱셈 (덧셈과 같음 0축이 열, 1축이 행으로 곱함)

print numpy.prod(my_array, axis = 0) #Output : [3 8]
print numpy.prod(my_array, axis = 1) #Output : [ 2 12]
print numpy.prod(my_array, axis = None) #Output : 24
print numpy.prod(my_array) #Output : 24
  • 입력 받은 행렬의 각 열의 합을 먼저 구하고 그 합들의 곱을 최종적으로 출력하는 문제
    import numpy as np

    N, M = map(int, input().split())

    my_array = np.array([input().split() for _ in range(N)], int)
    print(np.prod(np.sum(my_array, axis=0)))

Dot, Cross

내적, 외적을 구하는 문제

import numpy

# dot 내적

A = numpy.array([ 1, 2 ])
B = numpy.array([ 3, 4 ])

print numpy.dot(A, B) #Output : 11

# cross 외적

A = numpy.array([ 1, 2 ])
B = numpy.array([ 3, 4 ])

print numpy.cross(A, B) #Output : -2
  • 2개의 행렬을 입력 받고 내적만 하는 문제
    import numpy

    N = int(input())

    array_A = numpy.array([input().split() for _ in range(N)], int)
    array_B = numpy.array([input().split() for _ in range(N)], int)

    print(numpy.dot(array_A, array_B))

Inner, Outer

두 벡터의 내적(inner product)은 「.」(dot)으로 표기하며, 이래서 점곱(dot product)이라고도 말한다. 혹은 (a, b)와 같이 표기하기도 한다.
결과값이 스칼라이기 때문에 스칼라곱(scalar product)이라고도 하며, 계산할 때 한쪽 벡터의 코사인값을 사용하기 때문에
(즉, 한쪽 벡터에 직사광선을 쪼였을 때 그 그림자에 해당하는 코사인값을 사용) 영사곱(projection product)이라고도 말한다.

똑같은 개념을 두고 왜 이리 표현하는 말들이 많은지 의아할 수도 있는데, 대수학, 기하학, 물리학 등의 학문영역별로 명칭, 표기가 다르다는 정도만 이해하면 된다.
최적화에서도 민감도분석할 때 보면 수학자는 쌍대변수(dual variable)이라고 말하는데 경제학자들은 잠재가격(shadow price)라고 말한다.

외적 또한 cross product 혹은 outer product라고 한다
자세한 설명은 아래 링크를 통해 반복 복습!!
https://rfriend.tistory.com/146?category=606751

  • 내적 외적하는 문제
    입력에 대한 2가지 코딩 스타일
    import numpy as np

    A = np.array(list(map(int,input().split())))
    # 1차원 리스트를 만들고 싶기 때문에 []를 생략함!
    B = np.array(input().split(), int)

    print(np.inner(A,B), np.outer(A, B), sep='\n')